﻿using Circus.Utility;
using Circus.Utility.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web;

namespace WoAiPao {

    [Flags]
    public enum AppleProduct {

        iphone = 1 << 0,

        ipad = 1 << 2,
        
    }

    /// <summary>
    /// 表示一个用户。
    /// </summary>
    [DbBind("Users")]
    public sealed class User {

        /// <summary>
        /// 获取或设置当前用户的 ID。
        /// </summary>
        [DbPrimaryKey]
        public long id { get; set; }

        /// <summary>
        /// 获取或设置当前用户的用户名。
        /// </summary>
        public string name { get; set; }

        /// <summary>
        /// 获取或设置当前用户的密码。
        /// </summary>
        public string password { get; set; }

        /// <summary>
        /// 获取或设置当前用户的邮箱。
        /// </summary>
        public string email { get; set; }

        /// <summary>
        /// 获取或设置当前用户的角色。
        /// </summary>
        public UserPermissions permissions { get; set; }

        /// <summary>
        /// 获取或设置当前用户的最后登录时间。
        /// </summary>
        public DateTime lastLoginTime { get; set; }

        /// <summary>
        /// 获取或设置当前用户的最后登录 IP。
        /// </summary>
        public int lastLoginIp { get; set; }

        /// <summary>
        /// 获取或设置当前用户的创建时间。
        /// </summary>
        [DbBind("DataChange_CreateTime")]
        public DateTime createTime { get; set; }

        /// <summary>
        /// 判断当前用户是否被禁用。
        /// </summary>
        [DbBind(null)]
        public bool isDenied {
            get {
                return permissions.HasFlag(UserPermissions.denied);
            }
            set {
                if (value) {
                    permissions |= UserPermissions.denied;
                } else {
                    permissions &= ~UserPermissions.denied;
                }
            }
        }
    }

    /// <summary>
    /// 表示用户角色。
    /// </summary>
    [Flags]
    public enum UserPermissions {

        /// <summary>
        /// 无额外权限控制。
        /// </summary>
        [Description("无")]
        none,

        /// <summary>
        /// 账号禁用。
        /// </summary>
        [Description("账号禁用")]
        denied = 1 << 0,

        FIRST_PERMISSION = denied,

        /// <summary>
        /// 查看报告。
        /// </summary>
        [Description("查看报告")]
        reportManage = 1 << 1,

        /// <summary>
        /// 查看所有创意。
        /// </summary>
        [Description("查看所有创意")]
        viewAllAdPlans = 1 << 2,

        /// <summary>
        /// 有权限发布广告计划上线。
        /// </summary>
        [Description("上线创意")]
        publishAdPlan = 1 << 3,

        /// <summary>
        /// 删除创意。
        /// </summary>
        [Description("删除创意")]
        deleteAdPlan = 1 << 4,

        /// <summary>
        /// 展示位管理。
        /// </summary>
        [Description("展示位管理")]
        adResouceManage = 1 << 5,

        /// <summary>
        /// 投放管理。
        /// </summary>
        [Description("投放管理")]
        adStatusManage = 1 << 6,

        /// <summary>
        /// 有权限管理用户。
        /// </summary>
        [Description("用户管理")]
        userManage = 1 << 20,

        LAST_PERMISSION,

    }

}